// header-helper.ts
import { rcp } from '@kit.RemoteCommunicationKit';

/**
 * HTTP Header 处理工具类
 * 统一处理各种类型的HTTP响应头
 */
export class HeaderHelper {

  /**
   * 安全获取字符串类型的header值
   * @param headers 响应头对象
   * @param key header键名（不区分大小写）
   * @returns 字符串值，如果不存在或为空则返回空字符串
   */
  static getString(headers: rcp.ResponseHeaders, key: string): string {
    const value = headers[key] || headers[key.toLowerCase()];
    if (!value) {
      return '';
    }
    if (Array.isArray(value)) {
      return value.join(', ');
    }
    return String(value);
  }

  /**
   * 安全获取字符串数组类型的header值
   * @param headers 响应头对象
   * @param key header键名（不区分大小写）
   * @returns 字符串数组，如果不存在则返回空数组
   */
  static getStringArray(headers: rcp.ResponseHeaders, key: string): string[] {
    const value = headers[key] || headers[key.toLowerCase()];
    if (!value) {
      return [];
    }
    if (Array.isArray(value)) {
      return value.map(v => String(v));
    }
    return String(value).split(',').map(v => v.trim()).filter(v => v.length > 0);
  }

  /**
   * 安全获取数字类型的header值
   * @param headers 响应头对象
   * @param key header键名（不区分大小写）
   * @param defaultValue 默认值
   * @returns 数字值，如果解析失败则返回默认值
   */
  static getNumber(headers: rcp.ResponseHeaders, key: string, defaultValue: number = 0): number {
    const value = this.getString(headers, key);
    if (!value) {
      return defaultValue;
    }
    const parsed = parseInt(value, 10);
    return isNaN(parsed) ? defaultValue : parsed;
  }

  /**
   * 安全获取布尔类型的header值
   * @param headers 响应头对象
   * @param key header键名（不区分大小写）
   * @param defaultValue 默认值
   * @returns 布尔值，基于常见的true/false字符串判断
   */
  static getBoolean(headers: rcp.ResponseHeaders, key: string, defaultValue: boolean = false): boolean {
    const value = this.getString(headers, key).toLowerCase();
    if (!value) {
      return defaultValue;
    }
    return ['true', '1', 'yes', 'on'].includes(value);
  }

  /**
   * 检查header是否存在
   * @param headers 响应头对象
   * @param key header键名（不区分大小写）
   * @returns 是否存在且不为空
   */
  static hasHeader(headers: rcp.ResponseHeaders, key: string): boolean {
    const value = headers[key] || headers[key.toLowerCase()];
    return value !== undefined && value !== null && value !== '';
  }

  /**
   * 获取所有匹配的header值（支持大小写不敏感的多个匹配）
   * @param headers 响应头对象
   * @param keys header键名数组
   * @returns 第一个非空的header值
   */
  static getFirstString(headers: rcp.ResponseHeaders, keys: string[]): string {
    for (const key of keys) {
      const value = this.getString(headers, key);
      if (value) {
        return value;
      }
    }
    return '';
  }

}
